package WordScrambleEx;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Scanner;

class WordScrambleEx1 {


	public static void main(String[] args) throws IOException { 
        String[] strArr = { "CHANGE", "LOVE", "HOPE", "VIEW"}; 
        BufferedReader br =new BufferedReader(new InputStreamReader(System.in)) ;
        String str = "";
       

        while(true) { 
            String answer = getAnswer(strArr); 
            String question = getScrambledWord(answer); 
/*            System.out.println("Question :" + question); 
            System.out.print("Your answer is :"); */
            
            char[] hintt = new char[answer.length()];
            for(int i=0;i<hintt.length;i++){
            	hintt[i]='_';
            }

          while (true) {
              System.out.println("Question :" + question); 
              System.out.print("Your answer is :"); 
            
              str=br.readLine();
            // 2. 사용자가 q 또는 Q를 입력하면 프로그램을 종료한다.
            if(str.equalsIgnoreCase("q")){
            	System.out.println("종료됩니다.");
            	System.exit(0);            	
            }
            // 3. 사용자가 정답을 맞출때까지 반복하다가
            //     사용자가 정답을 맞추면, while문을 빠져나간다.
            if(str.equalsIgnoreCase(answer)){
            	System.out.println("정답");
            	break;
            }else{
            	System.out.println("정답이 아닙니다.");
            	System.out.println("hint: " + getHint(answer, hintt));
            	
            }
          }    
      } // while 
  } // main 

  public static String getAnswer(String[] strArr) { 
	  /*배열strArr의 요소중의 하나를 임의로 골라서 반환한다.(Math.random()사용)*/
	 // for(int i=0; i<strArr.length;i++){
		 return (strArr[(int)(Math.random()*strArr.length)]);
	  //}
	  
	  
  } 
  
  public static String getScrambledWord(String str) { 
/*	  주어진 문자열 str의 각 문자의 순서를 뒤섞은 다음, 새로운 문자열로 반환한다.
      (Math.random()사용)*/
/*	  String scram="";
        char[] chArr = str.toCharArray();
        ArrayList<Character> arr = new ArrayList<Character>();
        for(int i=0; i<chArr.length;i++){
        	arr.add(Array.getChar(chArr, i));
        }
        while(arr.size()>0){
        	scram+= arr.remove((int)(arr.size()*Math.random()));
        }
        return scram;*/
	  
	  char[] chArr = str.toCharArray();
	  for(int i=0;i<str.length()*2;i++){
		  int iDx = (int)(Math.random()*str.length());
		  
		  char tmp = chArr[0];
		  chArr[0] = chArr[iDx];
		  chArr[iDx]= tmp;
	  }
	  return new String(chArr);
  } // scramble(String str) 
  
  public static String getHint(String answer, char[] hint) {
	  int count = 0; // 힌트에 포함된 '_'의 개수
      // 1. 반복문을 이용해서 hint에 포함된 '_'의 개수를 센다.
	  ArrayList arr = new ArrayList();

	  for(int i=0;i<hint.length;i++){
		  if(hint[i]=='_'){
			  count++;
			  arr.add(i);
		  }
	  }
	//  System.out.println(arr.size());
	  int id= (int)(Math.random()*arr.size());
	 
	  id=(Integer) arr.get(id);
	  hint[id]=answer.charAt(id);

      // 2. count의 값이 2보다 클 때만 정답의 한 글자를 hint에 넣는다.
      //    정답을 다 알려주는 상황이 되지 않게 하기 위함.

      //    [주의] 반드시 이전 힌트 보다 한글자를 더 보여줘야함.
      //    예를 들어 정답이 "LOVE"이고 이전 힌트가 "L___"이었다면
      //    그 다음 힌트는 "L__E"또는 "L_V_" 와 같은 식이어야 한다.
      //    Math.random()을 사용해서 정답의 한 글자를 골라서 힌트에 넣으면 된다.
	  return new String(hint);
 } // getHint()  

}
